package me.xhy.java.springboot3.webflux.projectreactor.s3projectreactor;

import reactor.core.publisher.Flux;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author xhy
 * @since 2024-11-06 上午8:47
 */
public class S3GenerateAndCreate {
  public static void main(String[] args) throws InterruptedException {

    // 1. 产生序列
    // generate 同步的方式发布数据；sink 接收器、水槽、通道
    // generate 第一个参数： 原始数据 或 上一次发送的数据
    // 初始数据 () -> 0 可以传入原子变量 AtomicInteger::new ， 以应对多线程场景
    System.out.println("1. 产生序列");
    Flux.generate(AtomicInteger::new, (state, sink) -> {
          if (state.get() <= 10) {
            // 传输数据，可能抛出运行时异常
            sink.next("generate-sink: " + state);
            state.getAndIncrement();
          } else {
            sink.complete();
          }
          return state; //
        }).log()
        .subscribe(System.out::println);


    // 2. create 异步 多线程


  }
}
